# build.py
import sys
import subprocess
import os
import shutil
import re


def clean_build():
    print("清理打包环境...")
    for dir_name in ['build', 'dist']:
        if os.path.exists(dir_name):
            shutil.rmtree(dir_name)

    if os.path.exists('potx识别系统.spec'):
        os.remove('potx识别系统.spec')
        print("已删除旧的.spec文件")


def build_app(env, info):
    # 清理旧的构建
    clean_build()
    # 基础参数
    base_cmd = [
        'pyinstaller',
        '--clean',
        '--windowed',
        '--hidden-import=PyQt5.sip',
        '--hidden-import=numpy',
        '--hidden-import=pandas',
        '--hidden-import=numpy.core._dtype_ctypes',
        '--exclude-module=_tkinter',
        '--exclude-module=matplotlib'
    ]

    # 修改源代码中的常量（关键步骤）
    with open('main.py', 'r', encoding='utf-8') as f:
        content = f.read()

    # 使用正则表达式替换常量值
    content = re.sub(r'APP_ENV = \'.*?\'', f'APP_ENV = \'{env}\'', content)
    content = re.sub(r'APP_INFO = \'.*?\'', f'APP_INFO = \'{info}\'', content)
    # 写入临时文件
    with open('main_temp.py', 'w', encoding='utf-8') as f:
        f.write(content)
    cmd = base_cmd + [
        '--name', 'potx识别系统',
        '--onefile',
        'main_temp.py',
    ]

    print(f"执行命令: {' '.join(cmd)}")
    result = subprocess.run(cmd, check=True)

    if result.returncode != 0:
        print(f"打包失败，错误码: {result.returncode}")
        sys.exit(1)
    # 清理临时文件
    os.remove('main_temp.py')
    print(f"{env} 版本打包完成!")


if __name__ == '__main__':
    # 打包时修改参数即可，dev代表限制版本，pro代表无限制版本
    build_app('pro', '程序员晚枫')
